package cn.cocho.android.mc.util;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

/**
 * 日期操作
 * 
 * @author HAIKANG SONG
 * @time 2013-4-18上午10:52:52
 */
 
public class DateUtil {
	
	/**
	 * yyyy-MM-dd
	 */
	public static final String YYYY_MM_DD = "yyyy-MM-dd";
	
	/**
	 * yyyy-MM-dd HH:mm(24小时)
	 */
	public static final String YYYY_MM_DD_HH_MM = "yyyy-MM-dd HH:mm";
	
	/**
	 * yyyy-MM-dd HH:MM:SS(24小时)
	 */
	public static final String YYYY_MM_DD_HH_MM_SS_24h = "yyyy-MM-dd HH:mm:ss";
	
	/**
	 * yyyy-MM-dd hh:mm:ss(12小时)
	 */
	public static final String YYYY_MM_DD_HH_MM_SS_12h = "yyyy-MM-dd hh:mm:ss";

	/**
	 * MM-dd HH:MM:SS(24小时)
	 */
	public static final String MM_DD_HH_MM_SS_24h = "MM-dd HH:mm:ss";

	/**
	 * MM-dd hh:mm:ss(12小时)
	 */
	public static final String MM_DD_HH_MM_SS_12h = "MM-dd hh:mm:ss";


	/**
	 * 获得当前日期，格式yyyy-MM-dd
	 * 
	 * @return
	 * @author HAIKANG SONG
	 * @time 2013-4-18上午10:53:07
	 */
	public static String getCurrentDate() {
		return getCurrentDate(YYYY_MM_DD);
	}

	/**
	 * 获得当前时间，格式yyyy-MM-dd hh:mm:ss
	 * 
	 * @return
	 * @author HAIKANG SONG
	 * @time 2013-4-18上午10:53:07
	 */
	public static String getCurrentTime() {
		return getCurrentDate(YYYY_MM_DD_HH_MM_SS_12h);
	}

	/**
	 * 获得当前时间，格式自定义
	 * 
	 * @param format
	 *            如：yyyy-MM-dd
	 * @return
	 * @author HAIKANG SONG
	 * @time 2013-4-18上午10:54:52
	 */
	public static String getCurrentDate(String format) {
		Calendar day = Calendar.getInstance();
		day.add(Calendar.DATE, 0);
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		return sdf.format(day.getTime());
	}

	/**
	 * 获得昨天时间，格式自定义
	 * 
	 * @param format
	 *            如：yyyy-MM-dd
	 * @return
	 * @author HAIKANG SONG
	 * @time 2013-4-18上午11:24:21
	 */
	public static String getYesterdayDate(String format) {
		Calendar day = Calendar.getInstance();
		day.add(Calendar.DATE, -1);
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		String date = sdf.format(day.getTime());
		return date;
	}

	/**
	 * 判断指定时间是否符合指定的时间格式
	 * 
	 * @param date
	 *            时间字符串
	 * @param dateFormat
	 *            时间格式
	 * @return
	 * @author HAIKANG SONG
	 * @time 2013-4-18上午11:26:20
	 */
	public static boolean isDateFormat(String date, String dateFormat) {
		if (date != null) {
			SimpleDateFormat format = new SimpleDateFormat(dateFormat);
			format.setLenient(false);
			try {
				format.format(format.parse(date));
			} catch (ParseException e) {
				return false;
			}
			return true;
		}
		return false;
	}

	/**
	 * 将字符串类型的日期转换为一个Date对象
	 * 
	 * @param dateContent
	 *            日期字符串
	 * @param format
	 *            日期格式
	 * @return
	 * @author HAIKANG SONG
	 * @time 2013-4-18上午11:31:33
	 */
	public static Date formatDate(String dateContent, String format) throws Exception{
		DateFormat dateFormat = new SimpleDateFormat(format, Locale.ENGLISH);
		dateFormat.setLenient(false);
		Date date = dateFormat.parse(dateContent);
		return new Date(date.getTime());
	}

	/**
	 * 将日期对象转换为指定的字符串
	 * @param date 日期对象，如果为null，则返回值为空字符串
	 * @param format 格式，如果为null，则返回值为空字符串
	 * @return 空字符串或对应的值
	 */
	public static String formatDate(Date date, String format) {
		if (date == null || format == null) {
			return "";
		}
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		return sdf.format(date);
	}

	/**
	 * 将长整型日期转换为指定格式的日期字符串
	 * @param date 从1970年开始的秒数
	 * @param format 格式，如果为null，则返回值为空字符串
	 * @return 空字符串或对应的值
	 */
	public static String formatDate(long date, String format) {
		if (format == null) {
			return "";
		}
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		return sdf.format(new Date(date));
	}
	
	/**
	 * 将时间转化成几秒前，几分钟前，几小时前，几天前 ，距离当前时间大于10天的显示为“月日时间”格式
	 * 
	 * @param date
	 * @return
	 * @author shk
	 */
	public static String formatDateSpace(Date date) {
		if (date == null) {
			return "未知时间";
		}
		long before = date.getTime();
		long current = System.currentTimeMillis();
		long dur = (current - before) / 1000;
		if (dur <= 0) {
			return "刚刚";
		} else if (dur < 60) {
			return dur + "秒前";
		} else if (dur <= 60 * 60) {
			return dur / 60 + "分钟前";
		} else if (dur <= 3600 * 24) {
			return dur / (60 * 60) + "小时前";
		} else if (dur / (60 * 60 * 24) < 10) {
			return dur / (60 * 60 * 24) + "天前";
		}
		else {// 大于10天的显示为“月日时间”
			return org.apache.http.impl.cookie.DateUtils.formatDate(date, YYYY_MM_DD);
		}
	}
	
	public static String formatDuration12H(Date start, Date end) {
		SimpleDateFormat dateFormat=new SimpleDateFormat(YYYY_MM_DD_HH_MM_SS_12h);
		return dateFormat.format(start) + CommonSigns.WAVY_LINE + dateFormat.format(end);
	}
	
	public static String formatDuration24H(Date start, Date end) {
		SimpleDateFormat dateFormat=new SimpleDateFormat(YYYY_MM_DD_HH_MM_SS_24h);
		return dateFormat.format(start) + CommonSigns.WAVY_LINE + dateFormat.format(end);
	}
	
	public static String formatDurationYMD(Date start, Date end) {
		SimpleDateFormat dateFormat=new SimpleDateFormat(YYYY_MM_DD);
		return dateFormat.format(start) + CommonSigns.WAVY_LINE + dateFormat.format(end);
	}

}
